#include<bits/stdc++.h>
using namespace std;
int p[100010];
int n,m,l,lv;
struct car{
    int d,v,a,pb,pe;
    int ob,oe;
}c[100010];
void op(int x)
{
    if(c[x].v<=lv&&c[x].a<=0)
    {
        c[x].ob=c[x].oe=-1;
        return;
    }
    int v0=c[x].v,v=lv,a=c[x].a;
    int t;
    t=v-v0;
    t=(int)(t/a);
    if(v>lv)
    {
        c[x].ob=c[x].d;
        if(c[x].a>=0)
        {
            c[x].oe=l;
        }
        else
        {
            c[x].oe=c[x].d+v0*t+a*t*t/2;
        }
        return;
    }
    if(a>0)
    {
        c[x].ob=c[x].d+v0*t+a*t*t/2;
        if(c[x].ob>l) c[x].ob=c[x].oe=-1;
        else c[x].oe=l;
    }
}
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int t;
    cin>>t;
    while(t>0)
    {
        t--;
        set<int>sa;
        cin>>n>>m>>l>>lv;
        for(int i=1;i<=n;i++)
        {
            cin>>c[i].d>>c[i].v>>c[i].a;
            op(i);
        }
        for(int i=1;i<=m;i++)
        {
            cin>>p[i];
        }
        sort(p+1,p+m+1);
        for(int i=1;i<n;i++)
        {
            if(c[i].ob==c[i].oe&&c[i].ob==-1)
            {
                c[i].pb=0;
                c[i].pe=0;
            }
            for(int j=1;j<=m;j++)
            {
                if(p[j]>=c[i].ob)
                {
                    c[i].pb=j;
                    break;
                }
            }
            for(int j=m;j>=1;j--)
            {
                if(p[j]<=c[i].oe)
                {
                    c[i].pe=j;
                    break;
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=c[i].pb;j<=c[i].pe;j++)
            {
                sa.insert(j);
            }
        }
        cout<<m-sa.size()+1;
    }
    return 0;
}
